package cn.ffcs.uec.wBStaffInfo.action;

import java.text.ParseException;
import java.text.SimpleDateFormat;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Components;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zul.Messagebox;

import cn.ffcs.raptornuke.plugin.common.zk.ctrl.BasePortletComposer;
import cn.ffcs.uec.common.util.NodeVoUtil;
import cn.ffcs.uec.common.util.UecConstants;
import cn.ffcs.uec.outStaff.model.UecOutStaffInfo;
import cn.ffcs.uec.staff.model.UecEnc;
import cn.ffcs.uec.wBStaffInfo.action.bean.WbEncEditBean;
import cn.ffcs.uom.common.constants.BaseUnitConstants;
import cn.ffcs.uom.common.util.DateUtil;
import cn.ffcs.uom.common.util.ListboxUtils;
import cn.ffcs.uom.common.util.PlatformUtil;
import cn.ffcs.uom.common.util.PubUtil;
import cn.ffcs.uom.common.util.StrUtil;

@Controller
@Scope("prototype")
public class WbEncEditComposer extends BasePortletComposer {

	private static final long serialVersionUID = 3086340593438520480L;
	/**
	 * 页面bean
	 */
	private WbEncEditBean bean = new WbEncEditBean();
	/**
	 * 操作类型
	 */
	private String opType;
	/**
	 * 人员信息
	 */
	private UecOutStaffInfo uecOutStaffInfo;
	/**
	 * 添加人员奖励信息
	 */
	private UecEnc uecEnc;


	@Override
	public void doAfterCompose(Component comp) throws Exception {
		super.doAfterCompose(comp);
		Components.wireVariables(comp, bean);
	}

	/**
	 * 初始化窗口
	 * 
	 * @throws ParseException
	 */
	public void onCreate$wBEncEditWindow() throws ParseException {
		this.bindCombobox();
		this.bindBean();
	}

	/**
	 * 绑定combobox
	 */
	private void bindCombobox() {
		// 奖励级别
		ListboxUtils.rendererForEdit(bean.getEncourrank(),
				NodeVoUtil.getDictionaries(UecConstants.AWARD_LEVEL));
		// 奖励档次
		ListboxUtils.rendererForEdit(bean.getGlbdef5(),
				NodeVoUtil.getDictionaries(UecConstants.AWARD_GARDE));
	}

	/**
	 * bindBean
	 * 
	 * @throws ParseException
	 */
	public void bindBean() throws ParseException {
		opType = (String) arg.get("opType");
		if ("add".equals(opType)) {
			this.bean.getWBEncEditWindow().setTitle("新增奖励信息");
			bean.getUecOutStaffEncEditDiv().setHeight("40%");
			uecOutStaffInfo = (UecOutStaffInfo) arg.get("uecOutStaffInfo");
		}
		if ("edit".equals(opType)) {
			this.bean.getWBEncEditWindow().setTitle("编辑奖励信息");
			bean.getUecOutStaffEncEditDiv().setHeight("40%");
			uecEnc = (UecEnc) arg.get("uecEnc");
			if (null != uecEnc) {
				PubUtil.fillBeanFromPo(uecEnc, bean);
				stringTransToDate();
			}
		}
	}

	/**
	 * 保存
	 * 
	 * @throws Exception
	 */
	public void onOk() throws Exception {
		String msg = this.checkUacStaffData();
		if (null != msg) {
			Messagebox.show(msg);
			return;
		}
		// 获取登录用户
		String currentName = PlatformUtil.getCurrentUser().getScreenName();
		if ("add".equals(opType)) {
			uecEnc = UecEnc.newInstance();
			PubUtil.fillPoFromBean(bean, uecEnc);
			dateTransToString();
			uecEnc.setStaffId(uecOutStaffInfo.getOutStaffId());
			uecEnc.setNmStaffType(BaseUnitConstants.NM_OUT_STAFF_TYPE);
			uecEnc.setPkPsndoc(uecOutStaffInfo.getPkPsnMsg());
			// 创建人
			uecEnc.setCreator(currentName);
			// 创建时间
			uecEnc.setCreationtime(DateUtil.getCurrenDate());
			uecEnc.setDr(0L);
			uecEnc.setStatusCd("1000");
			uecEnc.setLastflag("Y");
			uecEnc.setRecordnum(0L);
			uecEnc.addOnly();
			Events.postEvent("onOK", this.self, uecEnc);
			this.onCancel();
			Messagebox.show("数据新增成功！");

		}
		if ("edit".equals(opType)) {
			PubUtil.fillPoFromBean(bean, uecEnc);
			dateTransToString();
			// 修改人
			uecEnc.setModifier(currentName);
			// 修改时间
			uecEnc.setModifiedtime(DateUtil.getCurrenDate());
				uecEnc.updateOnly();
			Events.postEvent("onOK", this.self, uecEnc);
			this.onCancel();
			Messagebox.show("更新成功！");
		}

	}

	/**
	 * 取消
	 */
	public void onCancel() {
		// 关闭窗口
		this.bean.getWBEncEditWindow().onClose();
	}

	/**
	 * 检测填入的参数是否为空
	 */
	private String checkUacStaffData() {
		if (StrUtil.isNullOrEmpty(bean.getGlbdef1().getValue())) {
			return "填写奖励名称";
		} else if (StrUtil.isNullOrEmpty(bean.getEncourtype().getValue())) {
			return "填写奖励类型";
		} else if (StrUtil.isNullOrEmpty(bean.getEncourmatter().getValue())) {
			return "填写奖励事由";
		} else if (StrUtil.isNullOrEmpty(bean.getEncourmeas().getValue())) {
			return "填写奖励措施";
		} else if (StrUtil.isNullOrEmpty(bean.getEncourorg().getValue())) {
			return "填写奖励机构";
		} else if (StrUtil.isNullOrEmpty(bean.getEncourrank().getSelectedItem()
				.getValue())) {
			return "填写奖励级别";
		} else if (StrUtil.isNullOrEmpty(bean.getGlbdef5().getSelectedItem()
				.getValue())) {
			return "填写奖励档次";
		} else if (StrUtil.isNullOrEmpty(bean.getEncourdate().getValue())) {
			return "填写奖励日期";
		}
		return null;
	}

	/**
	 * 将Date类型时间转成String类型 Date --> String 一套模型，两套标准：日期类型需要格式化
	 */
	public void dateTransToString() {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
		if (!StrUtil.isNullOrEmpty(bean.getEncourdate().getValue())) {
			// 奖励日期
			uecEnc.setEncourdate(formatter.format(bean.getEncourdate()
					.getValue()));
		}
	}

	/**
	 * 将String类型的时间转换成Date类型
	 * 
	 * @throws ParseException
	 */
	public void stringTransToDate() throws ParseException {
		// 时间类型转换：String --> Date
		// 奖励日期
		if (null != uecEnc.getEncourdate()) {
			bean.getEncourdate().setValue(
					DateUtil.patternStrToDate(uecEnc.getEncourdate()));
		}
	}

}
